﻿<?php
App::uses('AppController', 'Controller');
/**
 * Trabalhos Controller
 *
 * @property Trabalho $Trabalho
 * @property AuthComponent $Auth
 */
class TrabalhosController extends AppController {

/**
 * Components
 *
 * @var array
 */
	public $components = array(
				'Upload'=>array(
					'size'=>10000000,
					//'type'=>array('text/xml', 'text/x-sql'),
					'diretorio'=>PAPER_PATH_COMPLETE
			));

			
	var $notasOral = array("Não Avaliado", "Rejeitado", "Aceito como poster", "Aceito como oral");
	var $notasPoster = array("Não Avaliado", "Rejeitado", "Aceito como poster");
			
/**
 * index method
 *
 * @return void
 */
	public function beforeFilter(){
		parent::beforeFilter();
		$this->set('TodasAsNotas', $this->notasOral);
	}
	
	public function index() {
		if($this->isAdmin()){
			$this->Trabalho->recursive = 0;
			$this->set('trabalhos', $this->paginate());
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function rel_poster(){
		if($this->isAdmin()){
			$trabalhos = $this->Trabalho->find('all', 
					array('recursive' => -1, 'conditions' => array('nota' => 2, 'atualizado' => 1 ), 'order' =>'titulo'));
			$total = count($trabalhos);
			$type = 'pôsteres';
			$this->set(compact('trabalhos', 'total', 'type'));
			$this->render('rel');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function rel_oral(){
		if($this->isAdmin()){
			$trabalhos = $this->Trabalho->find('all',
					array('recursive' => -1, 'conditions' => array('nota' => 3, 'atualizado' => 1 ), 'order' => 'titulo'));
			$total = count($trabalhos);
			$type = 'orais';
			$this->set(compact('trabalhos', 'total', 'type'));
			$this->render('rel');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function index_usuario(){
		if($this->isUser()){
			$this->Trabalho->recursive = 0;
			$this->set('trabalhos', $this->paginate(array('Trabalho.user_id'=>$this->usuarioAtual['id'])));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para usuários!'));
			$this->redirect('/');
		}
	}
	
	public function index_revisor(){
		if($this->isRevisor()){
			$this->Trabalho->recursive = 0;
			$this->set('trabalhos', $this->paginate(array('Trabalho.revisor_id'=>$this->usuarioAtual['id'])));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para usuários!'));
			$this->redirect('/');
		}
		$this->render('index_usuario');
	}
	
	public function atualizados() {
		if($this->isAdmin()){
			$this->Trabalho->recursive = 0;
			$this->paginate = array('limit'=>20,'conditions'=> array('atualizado'=>1));
			$this->set('trabalhos', $this->paginate());
			$this->render('index');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function desatualizados() {
		if($this->isAdmin()){
			$this->Trabalho->recursive = 0;
			$this->paginate = array('limit'=>20,'conditions'=>
					array('atualizado'=>0, 'OR'=>
							array(array('nota'=>3),array('nota'=>2))));
			$this->set('trabalhos', $this->paginate());
			$this->render('index');
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}
	
	public function download($id){
		$this->Trabalho->recursive = -1;
		$trabalho = $this->Trabalho->findById($id);
		if($this->isRevisor()){ 
			if($trabalho['Trabalho']['revisor_id'] !== $this->usuarioAtual['id'] && $trabalho['Trabalho']['user_id'] != $this->usuarioAtual['id']){
				$this->Session->setFlash(__('Você não tem permissão para acessar esse arquivo blá!'));
				$this->redirect('/');
			}
		}
		else if($this->isUser()){
			if($trabalho['Trabalho']['user_id'] != $this->usuarioAtual['id']){
				$this->Session->setFlash(__('Você não tem permissão para acessar esse arquivo!'));
				$this->redirect('/');
			}
		}

		$this->autoRender = false;
		//echo Router::url($this->here());
		$string = $trabalho['Trabalho']['caminho'];
		$this->response->header('Location', $this->request->base.'/'.$string);
		//$this->response->download();
		//$this->response->send();
		
	}

	public function view($id = null) {
		if($this->isAdmin()){
			$this->Trabalho->id = $id;
			if (!$this->Trabalho->exists()) {
				throw new NotFoundException(__('Trabalho Invalido'));
			}
			$this->set('trabalho', $this->Trabalho->read(null, $id));
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
	}

/**
 * add method
 *
 * @return void
 */
	public function add() {
		if($this->isUser()){
			if ($this->request->is('post')) {
				if($this->Trabalho->jaEnviadoDoMesmoTipo($this->request->data['Trabalho']['categoria_id'], $this->usuarioAtual['id'])){
					$this->Session->setFlash('Você já enviou um trabalho desse tipo!');
					$this->redirect('/users/user_area');
				}
				$this->Trabalho->create();
				$this->request->data = $this->request->data['Trabalho'];
				if($this->Upload->validar($this->request->data['caminho'])){
					if($this->Upload->armazenar($this->usuarioAtual['username'], $this->request->data['caminho'])){
						$this->request->data['caminho'] = 
							PAPER_PATH_SHORT.DS.$this->usuarioAtual['username'].DS.$this->request->data['caminho']['name'];
						$this->request->data['user_id'] = $this->usuarioAtual['id'];
						if ($this->Trabalho->save($this->request->data)) {
							$this->Session->setFlash(__('O arquivo foi salvo.'));
							$this->redirect(array('action' => 'index_usuario'));
						} else { // Não salvou
							$this->Session->setFlash(__('O trabalho não foi salvo. Por favor, tente novamente!'));
						}
					}else{ // Não armazenou o arquivo
						$this->Session->setFlash(__('O trabalho não foi armazenado. Por favor, tente novamente!'));
					}
				}else{ // Não validou o arquivo
					// TODO Arrumar para aparecer um erro melhor
					$this->Session->setFlash(__('O trabalho não foi validado. Por favor, tente novamente!'));
				}
			}
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para usuarios !'));
			$this->redirect('/');
		}
		$users = $this->Trabalho->User->find('list');
		$categorias = $this->Trabalho->Categoria->find('list');
		$this->set(compact('users', 'categorias'));
	}

/**
 * edit method
 *
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function edit($id = null) {
		if($this->isAdmin()){
			$this->Trabalho->id = $id;
			if (!$this->Trabalho->exists()) {
				throw new NotFoundException(__('Invalid trabalho'));
			}
			if ($this->request->is('post') || $this->request->is('put')) {
				if ($this->Trabalho->save($this->request->data)) {
					$this->Session->setFlash(__('The trabalho has been saved'));
					$this->redirect(array('action' => 'index'));
				} else {
					$this->Session->setFlash(__('The trabalho could not be saved. Please, try again.'));
				}
			} else {
				$this->request->data = $this->Trabalho->read(null, $id);
			}
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
		$categorias = $this->Trabalho->Categoria->find('list');
		$revisors = $this->Trabalho->Revisor->find('list', array('conditions' => array('Revisor.user_type' => 1)
				,'fields' => array('Revisor.nome')));
		$this->set(compact('categorias', 'revisors'));
	}
	
	public function dar_nota($id){
		if($this->isRevisor()){
			$trabalho = $this->Trabalho->findById($id);
			if($trabalho['Trabalho']['revisor_id'] == $this->usuarioAtual['id']){
				if ($this->request->is('post') || $this->request->is('put')) {
					if(!isset($this->request->data['Trabalho']['justificativa']))
						$this->request->data['Trabalho']['justificativa'] = "Aprovado";
					if ($this->Trabalho->save($this->request->data)) {
						$this->Session->setFlash(__('Trabalho salvo'));
						$this->redirect(array('action' => 'index_revisor'));
					} else {
						$this->Session->setFlash(__('O trabalho não pode ser salvo! Você deve dar uma justificativa!'));
						if($trabalho['Trabalho']['categoria_id'] == 5){
							$this->set('notas', $this->notasOral);
							$this->set('notasAlt', $this->notasPoster);
						}
						else{
							$this->set('notas', $this->notasPoster);
							$this->set('notasAlt', $this->notasOral);
						}
						
						$categorias = $this->Trabalho->Categoria->find('list');
						$this->set('categorias', $categorias);
					}
				} else {
					$this->request->data = $trabalho;
					if($trabalho['Trabalho']['categoria_id'] == 5){
							$this->set('notas', $this->notasOral);
							$this->set('notasAlt', $this->notasPoster);
						}
						else{
							$this->set('notas', $this->notasPoster);
							$this->set('notasAlt', $this->notasOral);
						}
						
					$categorias = $this->Trabalho->Categoria->find('list');
					$this->set('categorias', $categorias);
				}
			}
			else{
				$this->Session->setFlash('Você não pode ver essa página');
				$this->redirect('/');
			}
		}
		else{
			$this->Session->setFlash('Sessão exclusiva para Revisores');
			$this->redirect('/');
		}
	}
	
	public function nova_info($id){
		$trabalho = $this->Trabalho->findById($id);
		if($trabalho['Trabalho']['user_id'] == $this->usuarioAtual['id']){
			$this->Trabalho->recursive = -1;
			if(empty($this->request->data))
				if($trabalho['Trabalho']['nota'] == 2 || $trabalho['Trabalho']['nota'] == 3){
					$this->request->data = $trabalho;
				}
				else{
					$this->Session->setFlash('Sem permissão de alteração!');
					$this->redirect('/users/user_area');
				}
			else{
				$this->request->data['Trabalho']['atualizado'] = 1;
				
				if($trabalho['Trabalho']['nota'] == 2 || $trabalho['Trabalho']['nota'] == 3){
					if($this->Trabalho->save($this->request->data)){
						$this->Session->setFlash('Salvo com sucesso!');
						$this->redirect('index_usuario');
					}
					else{
						$this->Session->setFlash('Não foi possível salvar! Por favor tente novamente!');
					}
				}
				else{
					$this->Session->setFlash('Sem permissão de alteração!');
					$this->redirect('/users/user_area');
				}
			}
		}
		else {
			$this->Session->setFlash('Sem permissão!');
			$this->redirect('/users/user_area');
		}
				
	}
	
	public function apagar_info($id){
		if($this->isAdmin()){
			$this->Trabalho->recursive = -1;
			$trabalho = $this->Trabalho->findById($id);
			pr($trabalho);
			if(empty($trabalho)){
				$this->Session->setFlash('Trabalho não encontrado !');
				$this->redirect('index');
			}
			else{
				$trabalho['Trabalho']['autores'] = null;
				$trabalho['Trabalho']['resumo'] = null;
				$trabalho['Trabalho']['apresentador'] = null;
				$trabalho['Trabalho']['atualizado'] = 0;
				
				if($this->Trabalho->save($trabalho)){
						$this->Session->setFlash('Informações extras excluidas!');
						$this->redirect('view/'.$id);
				}
				else{
					$this->Session->setFlash('Não foi possível salvar! Por favor tente novamente!');
				}
			}
		}
		else {
			$this->Session->setFlash('Área exclusiva para administradores !');
			$this->redirect('/');
		}
	}
		
	
	

/**
 * delete method
 *
 * @throws MethodNotAllowedException
 * @throws NotFoundException
 * @param string $id
 * @return void
 */
	public function delete($id = null) {
		if($this->isAdmin()){
			if (!$this->request->is('post')) {
				throw new MethodNotAllowedException();
			}
			$this->Trabalho->id = $id;
			if (!$this->Trabalho->exists()) {
				throw new NotFoundException(__('Invalid trabalho'));
			}
			if ($this->Trabalho->delete()) {
				$this->Session->setFlash(__('Trabalho deleted'));
				$this->redirect(array('action' => 'index'));
			}
		}
		else{
			$this->Session->setFlash(__('Area exclusiva para administradores !'));
			$this->redirect('/');
		}
		$this->Session->setFlash(__('Trabalho was not deleted'));
		$this->redirect(array('action' => 'index'));
	}
}
